package day06

import java.io.File

/**
 * Run 函数
 *  光看作用域行为，run和apply差不多，但与apply不同，run函数不返回接收者，run返回的是lambda的最后一行结果
 *
 */
fun main() {

    //TODO: 1.查看某文件是否包含某个字符串
    val file = File("/Users/dingchenglei/Documents/测试文稿.pages")
    val run = file.run {
        readText().contains("great")
    }
//    println(run)


    //TODO: 2.run函数 传递函数引用
    //写法1
//    val run1 = "fdshjkfljdvbjknl  kjfdhkjldfksvfbksfk".run{
//        isLong(this)
//    }
    //写法2: 函数引用简写
//    val run1 = "fdshjkfljdvbjknl  kjfdhkjldfksvfbksfk".run(::isLong)
    val run1 = "fdshjkfljdvbjknl  kjfdhkjldfksvfbksfk".run {
        substring(0, 3)//最后一行的结果
        isLong(this)
//        substring(0, 3)//最后一行的结果

    }
//    println(run1)


    //TODO: 3. run 的函数链式调用,第一个函数的结果传给第二个函数，第二个函数结果传递给第三个函数
    "HEUIEIOP  IERUTSHKSJDLSJFOERIU"
        .run(::isLong)
        .run(::showMessage)
        .run(::println)



}

fun  isLong(name:String)=name.length>=10


fun showMessage(isLong: Boolean):String{
    return if (isLong){
        "name is  too long"
    }else{
        "please rename."
    }
}

